import { createStore } from 'redux'

const initState = {
  cart: []
}

// 纯函数： 仅进行数据处理， 无副作用， 输入什么类型， 就会返回什么类型
const reducer = (state = initState, action) => {
  const { type, payload } = action
  switch (type) {
    case "addToCart": {
      // payload 添加的数据
      // state.cart  购物车

      // 1. 数据是否在购物车存在 （通过id）
      const item = state.cart.find(v => v.id === payload.id)
      // 2. 存在  数量++
      if (item) {
        item.count++
      }
      // 3. 不存在  推入新数据， 并数量为1, 选中状态 true
      else {
        state.cart.push({ ...payload, count: 1, check: true })
      }
      return {
        // 必须返回新数据 代替 代替老数据  
        // redux 三大原则
        cart: [...state.cart]
      };
    };
    case "addCount": {
      const item = state.cart.find(v => v.id === payload)
      item.count++;
      return {
        cart: [...state.cart]
      }
    }
    case "subCount": {
      const item = state.cart.find(v => v.id === payload)
      item.count--;
      return {
        cart: [...state.cart]
      }
    }
    case "checkChange": {
      const item = state.cart.find(v => v.id === payload)
      item.check = !item.check
      return {
        cart: [...state.cart]
      }
    }
    default: return state
  }
}

export const store = createStore(reducer)

//  1. 创建仓库
//  2. reducer 初始化数据